__author__ = "ncll"
__data__ = "2020/11/23 14:34"

# 缺省参数：有参数就用参数，没有就不用--备胎

# 综合应用: 学生管理系统(文件版)
# # 定一个列表，用来存储所有的学生信息(每个学生是一个字典)
#
# 有如下7个方法
# print("      学生管理系统 V1.0")
# print(" 1:添加学生")
# print(" 2:删除学生")
# print(" 3:修改学生")
# print(" 4:查询学生")
# print(" 5:显示所有学生")
# print(" 6:保存数据")
# print(" 7:退出系统")
# print("---------------------------")
#
# """添加学生信息"""
# new_name = input("请输入姓名:")
# new_tel = input("请输入手机号:")
# new_qq = input("请输入QQ:")
# 添加学生可能出现：
#
# 此用户名已经被占用, 请重新输入
#
# 定义一个字典，用来存储用户的学生信息(这是一个字典)
# 向字典中添加数据
# 向列表中添加这个字典
#
# """删除学生信息"""
# "请输入要删除的序号:"
#
# 你确定要删除么?yes or no
#
# 输入序号有误, 请重新输入
#
# """修改学生信息"""
# "请输入要修改的序号:"
# "你要修改的信息是:"
# input("请输入新的姓名:")
# input("请输入新的手机号:")
# input("请输入新QQ:")
# print("输入序号有误,请重新输入")
#
# """查询学生信息"""
# "请输入要查询的学生姓名:"
# 查询到的信息如下:
# "没有您要找的信息...."
#
# """遍历学生信息"""
# 序号\t姓名\t\t手机号\t\tQQ
#
# """加载之前存储的数据"""
#
# 作业：写出这个学生管理系统的后台，周日12点之前写完


# 添加学生：
def main():
    while True:
        # 1、打印功能
        print_menu()

        # 2、获取用户的选择
        num = int(input("请输入要进行的操作(数字)："))

        # 3、根据用户的选择，做相应的事情
        if num == 1:
            add_new_info()
        elif num == 2:
            del_info()
        elif num == 3:
            modify_info()
        elif num == 4:
            search_info()
        elif num == 5:
            print_all_info()
        elif num == 6:
            save_data()
        elif num == 7:
            exit_flag = input("你确定要退出吗？yes or no")
            if exit_flag == "yes":
                break
        else:
            print("输入有误，请重新输入......")


        input("\n\n按回车键继续")


def print_menu():
    print("      学生管理系统 V1.0")
    print(" 1:添加学生")
    print(" 2:删除学生")
    print(" 3:修改学生")
    print(" 4:查询学生")
    print(" 5:显示所有学生")
    print(" 6:保存数据")
    print(" 7:退出系统")
    print("---------------------------")


list_stu = []

# 添加学生信息


def add_new_info():
    dic_stu = {}
    new_name = input("请输入姓名:")
    dic_stu["姓名"] = new_name
    i = 0
    while i < len(list_stu):
        if new_name == list_stu[i]['姓名']:
            print("此用户名已经被占用, 请重新输入")
            new_name = input("请输入姓名:")
            dic_stu["姓名"] = new_name
            i = 0
        else:
            i += 1
    new_tel = input("请输入手机号:")
    new_qq = input("请输入QQ:")

    dic_stu["手机号"] = new_tel
    dic_stu["QQ"] = new_qq

    list_stu.append(dic_stu)

    flag_add = int(input("如果需要继续添加信息，请输入1；无需添加，请输入0  "))
    if flag_add == 1:
        add_new_info()
    print(list_stu)

# 删除学生信息


def del_info():
    try:

        del_num = int(input("请输入要删除学生的序号"))
        del_flag = input("确定删除，请输入 yes；取消删除，请输入 no ： ")
        if del_flag == 'yes':
            del list_stu[del_num-1]
            print("已删除")
        else:
            print("取消删除")
        print(list_stu)
    except:
        print("没有该序号")


# 修改学生信息


def modify_info():
    modify_num = int(input("请输入要修改学生的序号"))
    print("你要修改的信息是：")
    if 0 <= modify_num < len(list_stu):
        list_stu[modify_num-1]['姓名'] = input("请输入新的姓名： ")
        list_stu[modify_num-1]['手机号'] = input("请输入新的手机号： ")
        list_stu[modify_num-1]['QQ'] = input("请输入新的QQ： ")
    else:
        print("输入错误")
    print(list_stu)

# 查询学生信息


def search_info():
    name = input("请输入要查询的学生姓名")
    dic_stu = {}
    for i in list_stu:
        if name == i['姓名']:
            print(i)
        else:
            print("查询不到该学生信息")
    # for j in range(len(list_stu)):
    #     if name == list_stu[j]['姓名']:
    #         print(list_stu[j])
    #         break
    #     else:
    #         print("查询不到该学生信息")


# 打印学生信息


def print_all_info():
    print("所有学生的信息为：")
    i = 1
    for temp in list_stu:
        print("%d 姓名:%s 手机号:%s QQ: %s" % (i, temp['姓名'], temp['手机号'], temp['QQ']))
        i += 1


def save_data():
    print("保存信息")
    file_stu = open("学生信息管理记事本", 'w', encoding='utf-8')
    ii = 0
    while ii < len(list_stu):
        file_stu.write(str(list_stu[ii]))
        ii += 1


main()

print("1:添加学生")






# 1、这两个参数是什么意思：*args，**kwargs？我们为什么要使用它们？

# *args:传入列表或者元组形式的参数，不确定要传入多少参数时，用 *args
# **kwargs:传入字典形式的参数，不确定要传多少关键字参数时，用 **kwargs

# 2、（先自己想，然后再实验，最后查百度）
# 求f(2) f(3,[3, 2, 1]) f(3)的值

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]

def f(x, l = []):
    print(id(l))
    for i in range(x):
        l.append(i*i)
    print(l)
f(2)
f(3,[3, 2, 1])
f(3)
# 3、如何在一个函数内部修改全局变量

global a

# 4、用lambda函数实现两个数相乘

# res = lambda x, y: x*y
# print(res(1, 3))

# 5、列表推导式求列表所有奇数并构造新列表，a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# list_a = [i for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if i % 2 == 1]
# print(list_a)





